using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditorInternal.Profiling.Memory.Experimental;
using UnityEngine;
using UnityEngine.UI;

[Serializable]
public class BPStringToItemDictDictionary : SerializedDictionary<string, SerializedDictionary<int, Item>> { }

public class fastbackpack : MonoBehaviour
{

    //[HideInInspector]
    public GameObject 物品面板;
    public GameObject 物品单位预设;
    private 物品单位 单位预设;

    [HideInInspector]
    public BPStringToItemDictDictionary BPDictionary = new BPStringToItemDictDictionary();
    [HideInInspector]
    public Dictionary<Tuple<string, int>, GameObject> BPUnit=new Dictionary<Tuple<string, int>, GameObject>();
    public enum LayoutType
    {
        None,
        GridLayoutGroup,
        VerticalLayoutGroup,
        HorizontalLayoutGroup
    }
    [HideInInspector]
    public LayoutType 排列方式类型 = LayoutType.None; // 当前选择的布局类型
    private LayoutGroup 排列方式组件; // 当前附加的布局组件引用
    void Start()
    {
        // 初始化时尝试获取现有的布局组件
        更新排列方式组件();
        
    }
    // 根据枚举值切换布局组件
    public void ApplyLayoutType(LayoutType newType)
    {
        // 如果类型没变，则不执行任何操作
        if (排列方式类型 == newType && 排列方式组件 != null)
            return;
        // 移除现有的布局组件（如果存在）
        移除排列方式组件();
        // 添加新的布局组件
        switch (newType)
        {
            case LayoutType.GridLayoutGroup:
                排列方式组件 = 物品面板.gameObject.AddComponent<GridLayoutGroup>();
                break;
            case LayoutType.VerticalLayoutGroup:
                排列方式组件 = 物品面板.gameObject.AddComponent<VerticalLayoutGroup>();
                break;
            case LayoutType.HorizontalLayoutGroup:
                排列方式组件 = 物品面板.gameObject.AddComponent<HorizontalLayoutGroup>();
                break;
            case LayoutType.None:
            default:
                排列方式组件 = null;
                break;
        }
        
        排列方式类型 = newType;
        更新排列方式组件();
    }
    // 移除当前的布局组件
    private void 移除排列方式组件()
    {
        if (排列方式组件 != null)
        {
            DestroyImmediate(排列方式组件);
            排列方式组件 = null;
        }
    }
    // 更新当前布局组件的引用
    private void 更新排列方式组件()
    {
        // 尝试获取现有的布局组件
        排列方式组件 = 物品面板.GetComponent<LayoutGroup>();
        // 如果存在组件，则根据类型设置排列方式类型
        if (排列方式组件 != null)
        {
            if (排列方式组件 is GridLayoutGroup)
                排列方式类型 = LayoutType.GridLayoutGroup;
            else if (排列方式组件 is VerticalLayoutGroup)
                排列方式类型 = LayoutType.VerticalLayoutGroup;
            else if (排列方式组件 is HorizontalLayoutGroup)
                排列方式类型 = LayoutType.HorizontalLayoutGroup;
        }
        else
        {
            排列方式类型 = LayoutType.None;
        }
    }

    void Update()
    {
        
    }
    public void additem(Item newItem)
    {
        if (newItem.ItemCanStacked)
        {
            if (!BPDictionary.ContainsKey(newItem.ItemId))
            {
                Debug.Log(newItem.ItemName + "为未知物体");
                BPDictionary[newItem.ItemId].Add(newItem.Itemcnt, newItem);
                creatunit(newItem);
            }
            else
            {
                foreach(Item CanStacked in BPDictionary[newItem.ItemId].Values)
                {
                    CanStacked.Itemcnt += newItem.Itemcnt;
                }
            }
        }
        else
        {
            if (!BPDictionary.ContainsKey(newItem.ItemId))
            {
                Debug.Log(newItem.ItemName + "为未知物体");
                BPDictionary.Add(newItem.ItemId, new SerializedDictionary<int, Item>());
            }
            BPDictionary[newItem.ItemId].Add(newItem.Itemcnt, newItem);
            creatunit(newItem);
        }
    }

    public void creatunit(Item newItem)
    {
        //Debug.Log(newItem.ItemName + newItem.ItemId + newItem.ItemCategory+newItem.ItemDescription);
        Tuple<string, int> a = new Tuple<string, int>(newItem.ItemId, newItem.Itemcnt);
        Debug.Log("创建了key为" + a + "的物体单位");
        BPUnit[a]= Instantiate(物品单位预设, 物品面板.transform.position, 物品面板.transform.rotation, 物品面板.transform);

        单位预设 = BPUnit[a].GetComponent<物品单位>();
        单位预设.itemname = newItem.ItemName;
        单位预设.itemid = newItem.ItemId;
        单位预设.itemcnt = newItem.Itemcnt;
        单位预设.itemimage = newItem.ItemImage;
        单位预设.iteminfo = newItem.ItemDescription;

        单位预设.csh();
    }

    public void removeitem(Item newItem)
    {
        Tuple<string, int> a = new Tuple<string, int>(newItem.ItemId, newItem.Itemcnt);
        Destroy(BPUnit[a]);
        BPUnit.Remove(a);
        
    }


}
